home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOpus Plus
/
DOpus Plus.iso
/
Tutorial
/
C Guide
/
Code_Fragments
/
GetEntries.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-09-18
|
3KB
|
123 lines
/*
GetEntries.c - Read all selected Files from all sources
Does support a command template with "Name,..." as well
and does use then only the commandline names.
In case of collecting files from listers it does store
for each entry the lister and entry pointer too (do not
forget to free it later...:) )
*/
#include <proto/dos.h>
#include <proto/exec.h>
#define _DOPUS_MODULE_DEF
#include <dopus/modules.h>
// strcpy() is needed
#define SDI_TO_ANSI
#include <sdi_std.h>
#include <exec/memory.h>
typedef struct NodeData
{
APTR lister;
APTR entry;
};
extern APTR mempool;
/********************************************************************/
// Prototypes
// the function you should call
Att_List *GetFiles( IPCData *ipc, FuncArgs *fargs, DOpusCallbackInfo *dc );
Att_List *GetSourceEntries( IPCData *ipc, DOpusCallbackInfo *dc );
Att_List *GetArgNames( long farg );
/********************************************************************/
Att_List *GetFiles( IPCData *ipc, FuncArgs *fargs, DOpusCallbackInfo *dc )
{
Att_List *entrylist = NULL;
if( fargs && fargs->FA_Arguments[0] )
entrylist = GetArgNames( fargs->FA_Arguments[0] );
if( IsListEmpty((struct List *) entrylist) )
{
Att_RemList( entrylist, NULL );
entrylist = GetSourceEntries( ipc, dc );
}
if( IsListEmpty((struct List *) entrylist) )
{
Att_RemList( entrylist, NULL );
return NULL;
}
return entrylist;
}
/********************************************************************/
Att_List *GetSourceEntries( IPCData *ipc, DOpusCallbackInfo *dc )
{
ULONG num;
APTR entry, handle;
char buffer0[256], buffer1[256];
struct NodeData *nd;
Att_List *entrylist;
entrylist = Att_NewList( LISTF_POOL );
handle = dc->dc_GetSource( IPCDATA(ipc), buffer0 );
do
{
while( (num = dc->dc_ExamineEntry((entry = dc->dc_GetEntry(IPCDATA(ipc))), EE_NAME)) )
{
if( (nd=AllocMemH(mempool, sizeof(struct NodeData))) )
{
nd->lister = handle;
nd->entry = entry;
AddPart( strcpy(buffer1, buffer0), (STRPTR) num, 256 );
Att_NewNode( entrylist, buffer1, (ULONG) nd, NULL );
}
dc->dc_EndEntry( IPCDATA(ipc), entry, TRUE );
}
}
while( (handle = dc->dc_NextSource(IPCDATA(ipc), buffer0)) );
return entrylist;
}
/********************************************************************/
Att_List *GetArgNames( long farg )
{
Att_List *entrylist;
ULONG *argument_names;
argument_names = (ULONG *) farg;
entrylist = Att_NewList( LISTF_POOL );
do
{
Att_NewNode( entrylist, (STRPTR) *(argument_names), NULL, NULL );
}
while( *++argument_names );
return entrylist;
}
/********************************************************************/